/*
 * @Author: your name
 * @Date: 2022-01-18 14:05:36
 * @LastEditTime: 2022-01-20 12:24:14
 * @LastEditors: Please set LastEditors
 * @Description: cart模块下state.text的值
 * @FilePath: \uniapp\src\store\modules\cart.js
 */
export default {
    // 命名空间
    namespaced: true,
    state: {
        // 购物车数组
        cartList: uni.getStorageSync("cartList") || []

    },
    getters: {
        // 已经选中的商品 数组
        checkedCartList(state) {
            return state.cartList.filter(item => item.checked === true);
        },
        // 要支付的商品的总价格 checkedPrice
        checkedPrice(state, getters) {
            return getters.checkedCartList.reduce((price, item) => price += item.nums * item.goods_price, 0);
        },

        // 要支付的商品的总数量 checkedCount
        checkedCount(state, getters) {
            return getters.checkedCartList.reduce((count, item) => count += item.nums, 0);
        }
    },
    mutations: {
        // 给购物车 新增商品元素 payload={value:要添加的商品对象}
        cartAdd(state, payload) {
            // 判断当前商品是否已经存在 
            const index = state.cartList.findIndex(item => item.goods_id === payload.value.goods_id);
            if (index === -1) {
                // 不存在 push新的元素
                // 要自己设置一个购买数量进去   选中状态 
                state.cartList.push({...payload.value, nums: 1, checked: true });
            } else {
                // 存在
                // 存在 找到它 购买数量 ++
                state.cartList[index].nums++;
            }

            // 存一份到缓存中
            uni.setStorageSync("cartList", state.cartList);
        },
        // 商品的选中 取反功能 payload= {index}
        cartGoodsChecked(state, payload) {
            state.cartList[payload.index].checked = !state.cartList[payload.index].checked;
            uni.setStorageSync("cartList", state.cartList);
        },
        // 数量编辑  payload ={unit:1,index}  payload ={unit:-1,index}
        cartGoodsNumUpdate(state, payload) {
            state.cartList[payload.index].nums += payload.unit;
            uni.setStorageSync("cartList", state.cartList);
        },
        // 删除数组中的某个元素 根据下标来删除
        cartGoodsRemove(state, payload) {
            state.cartList.splice(payload.index, 1);
            uni.setStorageSync("cartList", state.cartList);
        },
        // 修改所有商品的选中状态 payload ={checked}
        cartAllGoodsChecked(state, payload) {
            state.cartList.forEach(item => item.checked = payload.checked);
            uni.setStorageSync("cartList", state.cartList);
        }
    },
    actions: {

    }
}